Replace for loop with iterators
authorAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 29 Aug 2016 07:34:32 +0000 (10:34 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 29 Aug 2016 07:34:32 +0000 (10:34 +0300)
src/cargo/core/resolver/encode.rs

index 1f79fbdc47755e1fbdd1fa3af23f7a4fe6c94f0b..fc2c2773786552a2521f1f114d074eb390d8c13b 100644 (file)
@@ -96,18 +96,15 @@ impl EncodableResolve {
             g
         };
 
-        let replacements = {
-            let mut replacements = HashMap::new();
-            for &(ref id, ref pkg) in live_pkgs.values() {
-                if let Some(ref replace) = pkg.replace {
-                    assert!(pkg.dependencies.is_none());
-                    if let Some(replace_id) = try!(lookup_id(replace)) {
-                        replacements.insert(id.clone(), replace_id);
-                    }
+        let replacements: HashMap<_, _> = try!(live_pkgs.values()
+            .filter_map(|&(ref id, pkg)| pkg.replace.as_ref().and_then(|replace| {
+                assert!(pkg.dependencies.is_none());
+                match lookup_id(replace) {
+                    Err(e) => Some(Err(e)),
+                    Ok(None) => None,
+                    Ok(Some(replace)) => Some(Ok((id.clone(), replace)))
                 }
-            }
-            replacements
-        };
+            })).collect());
 
         let mut metadata = self.metadata.unwrap_or(BTreeMap::new());